home *** CD-ROM | disk | FTP | other *** search
-
-
-
- CCCCGGGGIIII::::::::CCCCaaaarrrrpppp((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) CCCCGGGGIIII::::::::CCCCaaaarrrrpppp((((3333))))
-
-
-
- NNNNAAAAMMMMEEEE
- CCCCGGGGIIII::::::::CCCCaaaarrrrpppp - CGI routines for writing to the HTTPD (or other)
- error log
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- use CGI::Carp;
-
- croak "We're outta here!";
- confess "It was my fault: $!";
- carp "It was your fault!";
- warn "I'm confused";
- die "I'm dying.\n";
-
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- CGI scripts have a nasty habit of leaving warning messages
- in the error logs that are neither time stamped nor fully
- identified. Tracking down the script that caused the error
- is a pain. This fixes that. Replace the usual
-
- use Carp;
-
- with
-
- use CGI::Carp
-
- And the standard _w_a_r_n(), die (), _c_r_o_a_k(), _c_o_n_f_e_s_s() and
- _c_a_r_p() calls will automagically be replaced with functions
- that write out nicely time-stamped messages to the HTTP
- server error log.
-
- For example:
-
- [Fri Nov 17 21:40:43 1995] test.pl: I'm confused at test.pl line 3.
- [Fri Nov 17 21:40:43 1995] test.pl: Got an error message: Permission denied.
- [Fri Nov 17 21:40:43 1995] test.pl: I'm dying.
-
-
- RRRREEEEDDDDIIIIRRRREEEECCCCTTTTIIIINNNNGGGG EEEERRRRRRRROOOORRRR MMMMEEEESSSSSSSSAAAAGGGGEEEESSSS
- By default, error messages are sent to STDERR. Most HTTPD
- servers direct STDERR to the server's error log. Some
- applications may wish to keep private error logs, distinct
- from the server's error log, or they may wish to direct
- error messages to STDOUT so that the browser will receive
- them.
-
- The carpout() function is provided for this purpose. Since
- _c_a_r_p_o_u_t() is not exported by default, you must import it
- explicitly by saying
-
- use CGI::Carp qw(carpout);
-
-
-
-
- Page 1 (printed 10/23/98)
-
-
-
-
-
-
- CCCCGGGGIIII::::::::CCCCaaaarrrrpppp((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) CCCCGGGGIIII::::::::CCCCaaaarrrrpppp((((3333))))
-
-
-
- The _c_a_r_p_o_u_t() function requires one argument, which should
- be a reference to an open filehandle for writing errors. It
- should be called in a BEGIN block at the top of the CGI
- application so that compiler errors will be caught.
- Example:
-
- BEGIN {
- use CGI::Carp qw(carpout);
- open(LOG, ">>/usr/local/cgi-logs/mycgi-log") or
- die("Unable to open mycgi-log: $!\n");
- carpout(LOG);
- }
-
- _c_a_r_p_o_u_t() does not handle file locking on the log for you at
- this point.
-
- The real STDERR is not closed -- it is moved to SAVEERR.
- Some servers, when dealing with CGI scripts, close their
- connection to the browser when the script closes STDOUT and
- STDERR. SAVEERR is used to prevent this from happening
- prematurely.
-
- You can pass filehandles to _c_a_r_p_o_u_t() in a variety of ways.
- The "correct" way according to Tom Christiansen is to pass a
- reference to a filehandle GLOB:
-
- carpout(\*LOG);
-
- This looks weird to mere mortals however, so the following
- syntaxes are accepted as well:
-
- carpout(LOG);
- carpout(main::LOG);
- carpout(main'LOG);
- carpout(\LOG);
- carpout(\'main::LOG');
-
- ... and so on
-
- FileHandle and other objects work as well.
-
- Use of _c_a_r_p_o_u_t() is not great for performance, so it is
- recommended for debugging purposes or for moderate-use
- applications. A future version of this module may delay
- redirecting STDERR until one of the CGI::Carp methods is
- called to prevent the performance hit.
-
- MMMMAAAAKKKKIIIINNNNGGGG PPPPEEEERRRRLLLL EEEERRRRRRRROOOORRRRSSSS AAAAPPPPPPPPEEEEAAAARRRR IIIINNNN TTTTHHHHEEEE BBBBRRRROOOOWWWWSSSSEEEERRRR WWWWIIIINNNNDDDDOOOOWWWW
- If you want to send fatal (die, confess) errors to the
- browser, ask to import the special "fatalsToBrowser"
- subroutine:
-
-
-
-
- Page 2 (printed 10/23/98)
-
-
-
-
-
-
- CCCCGGGGIIII::::::::CCCCaaaarrrrpppp((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) CCCCGGGGIIII::::::::CCCCaaaarrrrpppp((((3333))))
-
-
-
- use CGI::Carp qw(fatalsToBrowser);
- die "Bad error here";
-
- Fatal errors will now be echoed to the browser as well as to
- the log. CGI::Carp arranges to send a minimal HTTP header
- to the browser so that even errors that occur in the early
- compile phase will be seen. Nonfatal errors will still be
- directed to the log file only (unless redirected with
- carpout).
-
- CCCChhhhaaaannnnggggiiiinnnngggg tttthhhheeee ddddeeeeffffaaaauuuulllltttt mmmmeeeessssssssaaaaggggeeee
-
- By default, the software error message is followed by a note
- to contact the Webmaster by e-mail with the time and date of
- the error. If this message is not to your liking, you can
- change it using the _s_e_t__m_e_s_s_a_g_e() routine. This is not
- imported by default; you should import it on the _u_s_e() line:
-
- use CGI::Carp qw(fatalsToBrowser set_message);
- set_message("It's not a bug, it's a feature!");
-
- You may also pass in a code reference in order to create a
- custom error message. At run time, your code will be called
- with the text of the error message that caused the script to
- die. Example:
-
- use CGI::Carp qw(fatalsToBrowser set_message);
- BEGIN {
- sub handle_errors {
- my $msg = shift;
- print "<h1>Oh gosh</h1>";
- print "Got an error: $msg";
- }
- set_message(\&handle_errors);
- }
-
- In order to correctly intercept compile-time errors, you
- should call _s_e_t__m_e_s_s_a_g_e() from within a BEGIN{} block.
-
- CCCCHHHHAAAANNNNGGGGEEEE LLLLOOOOGGGG
- 1.05 _c_a_r_p_o_u_t() added and minor corrections by Marc Hedlund
- <hedlund@best.com> on 11/26/95.
-
- 1.06 _f_a_t_a_l_s_T_o_B_r_o_w_s_e_r() no longer aborts for fatal errors
- within
- _e_v_a_l() statements.
-
- 1.08 _s_e_t__m_e_s_s_a_g_e() added and _c_a_r_p_o_u_t() expanded to allow for
- FileHandle
- objects.
-
- 1.09 _s_e_t__m_e_s_s_a_g_e() now allows users to pass a code REFERENCE
-
-
-
- Page 3 (printed 10/23/98)
-
-
-
-
-
-
- CCCCGGGGIIII::::::::CCCCaaaarrrrpppp((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) CCCCGGGGIIII::::::::CCCCaaaarrrrpppp((((3333))))
-
-
-
- for
- really custom error messages. croak and carp are now
- exported by default. Thanks to Gunther Birznieks for
- the
- patches.
-
- 1.10 Patch from Chris Dean (ctdean@cogit.com) to allow
- module to run correctly under mod_perl.
-
- AAAAUUUUTTTTHHHHOOOORRRRSSSS
- Lincoln D. Stein <lstein@genome.wi.mit.edu>. Feel free to
- redistribute this under the Perl Artistic License.
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- Carp, CGI::Base, CGI::BasePlus, CGI::Request, CGI::MiniSvr,
- CGI::Form, CGI::Response
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 4 (printed 10/23/98)
-
-
-
-